package com.tedu._04mybatis.mapper;

import com.tedu._04mybatis.pojo.Weibo;
import com.tedu._04mybatis.pojo.WeiboVo1;
import com.tedu._04mybatis.pojo.WeiboVo2;
import com.tedu._04mybatis.pojo.WeiboVo3;
import org.apache.ibatis.annotations.*;

import java.util.List;

@Mapper
public interface WeiboMapper {
    //@Insert("INSERT INTO weibo(content,created,user_id) VALUES (#{content},#{created},#{userId})")
    //这条语句可以直接写在weiboMapper.xml文件里
    //后面大括号里面的参数名字一定要和该参数类里的参数名一致
    int insert (Weibo weibo);
    //删除案例
    //@Delete("DELETE FROM weibo WHERE id=#{id}")
    int deleteById(Integer id);
    //@Update("UPDATE weibo SET content=#{content},created=#{created},user_id=#{userId} WHERE id=#{id}")
    int updateById(Weibo weibo);
    //@Select("SELECT id,content,created,user_id userId FROM weibo WHERE id=#{id}")//加一个别名这样数据表和类里的名字就能一样能匹配上了
    Weibo selectById(Integer id);
    //如果查询语言语句可以查询出多条记录，那么这个方法的返回值类型必须是一个集合，而不是单独的weibo对象了，否则mybatis查询后会抛出异常
    ////这条语句可以直接写在weiboMapper.xml文件里,但是返回值是weibo类，所以要在xml文件里要写上完全限定名（包名.类名）
    //@Select("SELECT id,content,created,user_id userId FROM weibo")
    List<Weibo> selectAll();
    //@Select("SELECT content,created FROM weibo WHERE  id=#{id}")//不查询所有字段，只查询某些字段，可以重新建一个类只有需要查询的字段的参数来接收
    WeiboVo1 selectWeiboVo1(Integer id);

    //查询所有的内容及id
    //@Select("SELECT content,user_id userId FROM weibo")
    //返回的是一组数据，所以用集合来接收
    List<WeiboVo2> selectWeiboVo2();
    //新加一个方法,避免未修改的语句变成空值的测试
    int dynamicUpdate(Weibo weibo);
    //添加方法 一次性删除多天记录
    int dynamicDeleteByIds(Integer[] ids);
    //一次性删除多条记录，用集合的方式
    int dynamicDeleteByIds2(List<Integer> ids);
    //返回的类型是weiboVo3的一个查询方法

    WeiboVo3 selectWeiboVo3ById(Integer id);
    List<WeiboVo3> selectAllWeibo();
}
